过来分别拉取RTMP和RTSP的流,整体延迟毫秒级:启动APP后,先选择需要采集的分辨率(如果选原始分辨率,系统不做缩放),然后选择“启动媒体投影”,并分别启动音频播放采集、采集麦克风。 如果音频播放采集和采集麦克风都打开,可以通过右侧下拉框,推送过程中,音频播放采集和麦克风采集实时切换。 需要注意的是,Android采集音频播放的audio,音频播放采集是依赖屏幕投影的,屏幕投影关闭后,音频播放也就采不到了。 屏幕采集推送;支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;支持实时动态水印;支持实时快照;支持降噪处理、自动增益控制;支持外部编码前音视频数据对接;支持外部编码后音视频数据对接; 总结以上是Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器,整体部署
随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2 )为例,介绍下如何采集编码推送RTMP数据到流媒体服务器。 libPublisher = new SmartPublisherJniV2(); private void InitAndSetConfig() { //开始要不要采集音频或视频 last_image.close(); last_image = null; } } } 关闭采集推送 } libPublisher.UnInitRtspServer(); super.onDestroy(); } 以上就是Android平台数据采集
国产操作系统|Linux下RTMP同屏推送 在发布国产操作系统|Linux平台的RTMP直播推送SDK之前,大牛直播SDK(官方)的RTMP推送模块已稳定运行在Windows、Android和iOS平台几年了 相对Windows、Android和iOS平台,Linux在桌面采集等方面,资料非常少,数据采集可以采用调用XLib相关接口实现,本Demo实现的是Linux上实现桌面和系统声音采集,然后使用RTMP协议推出去的一个 PushSDKInit(push_api)) { return 0; } auto push_handle = StartPush(&push_api, "rtmp://192.168.0.154 推送和RTMP播放为例,整体测试时延都在毫秒级,可满足像内网无纸化、教育同屏等场景需求。 Linux的RTMP推送接口,和Windows平台的相差无几,通用接口四个平台几乎一致,不存在集成难度。
技术背景随着国产化操作系统的推进,市场对国产化操作系统下的生态构建,需求越来越迫切,特别是音视频这块,今天我们讨论的是如何在linux平台实现屏幕|摄像头采集,并推送至RTMP服务。 我们知道,Linux平台,如果需要采集摄像头,可使用V4L2相关接口,屏幕采集用X相关接口实现,如果是Wayland协议, 用PipeWire相关接口实现采集就好。 FFmpeg VS SmartPublisher今天我们探讨的是,两种技术选型下的linux平台同屏摄像头RTMP推送实现:FFmpeg技术方案在Linux平台上采集屏幕和摄像头内容,并将其推送到RTMP X11屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择(设备文件名范围:[/dev ]支持基于libpulse接口采集本机PulseAudio服务音频;[预览]支持推送端实时预览;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;屏幕和摄像头合成/多层合成
大牛直播SDK的RTMP推送|轻量级RTSP服务模块实现主要涉及到SDK的初始化、视频采集设置、音频采集设置、编码设置、推流设置以及实时预览和停止预览等功能:目前,以RTMP推送模块为例,目前我们主要设计支持以下功能 :音频编码:AAC/SPEEX;视频编码:H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[屏幕/摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置 采集设置、启/停用Aero;[音频]采集麦克风;[音频]采集扬声器;[预览]支持推送端实时预览;支持实时静音、取消静音;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调; 视频采集设置数据源选择:支持从摄像头、屏幕或外部数据源采集视频数据。参数设置:包括帧率、分辨率、码率、关键帧间隔等。这些参数可以通过SDK接口单独设置,以满足不同的推流需求。 屏幕采集:支持全屏采集或部分区域采集,同时支持DXGI采集设置和启/停用Aero等功能。3. 音频采集设置音频源选择:支持采集麦克风音频、扬声器音频或进行混音输出。
技术背景为什么要在Linux平台麒麟、统信、飞腾平台实现RTMP推送、RTMP|RTSP播放和轻量级RTSP服务?归根结底,还是提升信息安全与自主可控能力,促进经济发展与产业升级。 屏幕采集用X相关接口实现,如果是Wayland协议, 用PipeWire相关接口实现采集就好。 麦克风采集使用ALSA或者PulseAudio,采集播放音频用PulseAudio。 :AAC/SPEEX;视频编码:H.264;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;支持X11屏幕采集;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔 ;[音频]支持基于libpulse接口采集本机PulseAudio服务音频;[预览]支持推送端实时预览;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;屏幕和摄像头合成 ;支持部分V4L2摄像头设备采集;[屏幕/V4L2摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;[V4L2摄像头]支持V4L2摄像头设备选择(设备文件名范围:[/dev/video0
+ 摄像头同步 + 语音讲解,用于项目复盘或成果汇报支持屏幕采集 + 本地摄像头采集,推送稳定,延迟小,图像可叠加✅ OA平台集成与自研 OA 协同系统、流程管理平台深度融合,完成嵌入式视频通话、回放提供 大牛直播SDK基于多年协议栈积累与工程落地经验,在以下五个维度构建了高度可嵌入、可私有部署的协同音视频能力模块:核心能力模块能力说明对协同办公的价值体现 摄像头/屏幕推流支持桌面屏幕采集、摄像头画面采集 、麦克风采集,编码为 RTMP 推流格式,支持边推边录实现远程视频讲解、培训演示、摄像同步,适配国产软硬件平台 RTMP/RTSP 播放支持低延迟 RTMP 和 RTSP 播放,解码后画面渲染至窗口或导出 ✅ 架构设计思路 终端采集层:桌面端通过摄像头或屏幕采集生成视频源;移动端可通过 App 采集上传; 推流与中转层:大牛推流SDK将音视频编码为 RTMP 格式推送至内网 RTMP 服务,支持私有流控与转发 架构组成模块模块描述推流 SDK支持摄像头 / 麦克风 / 桌面屏幕等采集来源,编码为 RTMP 或裸流推送内网 RTMP 服务轻量级嵌入式服务,可部署于任意服务器,支持流转发、多终端并发播放播放器 SDK
技术背景好多开发者希望搞清楚,Android平台同屏采集到编码推送RTMP的大概流程,简单来说,Android上采集屏幕数据,先进行audio和屏幕采集权限申请,包括在清单文件中声明权限和动态申请权限 android.permission.MEDIA_PROJECTION:这是进行屏幕采集的关键权限,允许应用获取屏幕内容。 ,用于后续的屏幕采集操作。 处理异常情况:在屏幕采集、编码和推送过程中,可能会出现各种异常情况,如权限申请失败、屏幕采集异常、编码错误、网络连接问题等。需要对这些异常情况进行捕获和处理,以保证应用的稳定性和可靠性。 需要注意的是,Android采集音频播放的audio,音频播放采集是依赖屏幕投影的,屏幕投影关闭后,音频播放也就采不到了。
好多开发者提到,有些Windows机器或Android手机采集麦克风的音频,过小或过大,一般过小居多,还有就是,混音的时候,希望背景音音量大小可实时调整,针对这种情况,大牛直播SDK(Github)做了如下的设计
而屏幕采集则是实现实时屏幕共享流程中的第一步,本篇技术分享就来跟大家讲讲拍乐云在 Andorid 端屏幕采集的经验实践。 鉴于目前市面上5.0以下的 Android 手机占比很低且屏幕采集需要 root 权限实现复杂,接下来我们主要介绍 Android5.0 及以上版本的屏幕采集原理。 屏幕采集流程 介绍完以上关键角色,我们大致可以画出一套屏幕采集流程图: ? 下面逐步介绍代码实现。 屏幕采集帧率的上限取决以 Android 设备的屏幕刷新率,下限是0,即丢弃所有返回数据不处理。采集帧率并不是越高越好,够用就行。 比如在低端机上,就算以较高帧率采集屏幕数据,但受限于机器编解码能力,实际上屏幕传输的帧率达不到采集帧率,反而会消耗过多系统资源导致发热、卡顿等现象。这时候就需要适当降低采集帧率。
image.png 越来越多的App需要共享手机屏幕给他人观看,特别是在线教育行业。 本库对屏幕采集编码进行了封装,简单的调用即可实现MediaProjection权限申请,H264硬编码,错误处理等功能。 ScreenShareKit.init(this) .onH264{ buffer, isKeyFrame, ts -> }.start() Github 源码地址 实现 1 请求用户授权屏幕采集 其实,可以结合一些第三方的音视频SDK,直接将编码后的屏幕流数据通过第三方SDK推流,就能实现屏幕共享功能。 Resources.getSystem().displayMetrics.widthPixels }) }.start() 几行代码就可以实现屏幕采集编码传输
转推:通过RTMP直播推送SDK的编码后数据输入接口,把回调上来的数据,传给RTMP直播推送模块,实现RTSP数据流到RTMP服务器的转发;3. 多路RTMP/RTSP转RTMP推送模块功能支持:支持拉取rtmp流;支持拉取rtsp流;Windows支持本地flv文件转发(支持制定文件位置转发,或转发过程中seek);支持本地预览;支持转发过程中 h265转rtmp h265推送);上述实现,2016年我们已经非常成熟,本次要谈的,是开发者实际场景用到的一个技术需求,如何实现视频用RTSP数据源获取到的,音频采集麦克风的数据。 的时候,调用了startAudioRecorder()来做麦克风的采集:void startAudioRecorder() {if(audio_opt_ ! audio_recorder_callback_);audio_recorder_callback_ = null;}audio_recorder_ = null;Log.i(TAG, "stopAudioRecorder---");}采集到的
基于此,好多开发者苦于在Unity环境下,没有低延迟的推拉流解决方案,前几年,我们在Unity环境下推出了跨平台低延迟的RTMP|RTSP直播播放器,很好的解决了好多对延迟要求苛刻的使用场景。 随着时间的推移,越来越多的开发者联系我们,希望我们能推出Unity环境下的RTMP推送模块,获取到unity的实时数据,更低延迟更高效率的实现数据传输推送,基于此,我们发布了Unity环境下的RTMP推送模块 本文以Windows平台为例,数据源分别为Unity的窗口、摄像头或整个屏幕,编码传输模块,还是调用大牛直播SDK(官方)的原生接口,简单界面先睹为快: win_publisher_unity2.png 初始化参数配置 这里需要注意下,如果要采集unity窗口,需要设置图层模式,先填充一层RGBA黑色背景,然后再添加一层,用于叠加外部数据。 数据采集 摄像头和屏幕的数据采集,还是调用原生的SDK接口,本文不再赘述,如果需要采集Unity窗体的数据,可以用参考以下代码: if ( texture_ == null || video_width
技术背景2015年,我们发布了第一版的Android平台RTMP摄像头|屏幕直播推送模块,几经迭代,功能强大、性能优异,在前些年几乎已经是业内延迟体验和口碑最好的RTMP模块了(毫秒级延迟,低延迟模式下 鉴于我们侧重于传统行业音视频直播方案,我们从以下几个维度,介绍下Android平台RTMP摄像头采集推送模块的使用场景。 远程监控家庭监控:将带有摄像头的 Android 设备放置在家中合适的位置,通过 RTMP 推流将摄像头采集到的视频数据传输到远程的服务器或手机端,用户可以随时随地通过网络查看家中的实时情况,保障家庭安全 医疗健康远程医疗诊断:医护人员可以使用 Android 设备的摄像头采集患者的病情症状、伤口等画面,通过 RTMP 推流将视频数据传输给远程的医生,医生根据实时画面进行诊断和指导,为患者提供及时的医疗服务 媒体与娱乐新闻报道:记者可以使用 Android 设备在新闻现场快速采集视频素材,并通过 RTMP 推流技术将现场画面实时传输回电视台或新闻网站,实现新闻的快速报道和传播,提高新闻的时效性和现场感。
大牛直播 SDK(SmartPublisher)正是针对这些典型的行业需求,构建了屏幕采集、多路音频融合、RTMP 推流、内置轻量级 RTSP 服务的一体化能力。 UI 层耦合 对于屏幕采集类应用,这是工业级方案。 二、视频采集:MediaProjection + VirtualDisplay 的零拷贝设计Android 屏幕采集的核心是 MediaProjection,但真正的工程难点在于“如何将屏幕像素高效送入编码器 基于大牛直播SDK提供的屏幕采集 + 多路音频 + RTMP/RTSP 双模架构,可以覆盖大量传统行业的典型场景。1. 总结在上述类型的传统行业场景中,屏幕采集 + 多路音频融合 + RTSP/RTMP 双模传输形成了一种非常通用且工程化的实时链路能力。
整体架构大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器 180° 270°旋转;[屏幕]支持DXGI采集设置、启/停用Aero;[音频]采集麦克风;[音频]采集扬声器;[预览]支持推送端实时预览;支持实时静音、取消静音;[对接服务器]支持自建标准RTMP服务器或 Linux平台x64_64架构|aarch64架构RTMP直播推送SDK音频编码:AAC/SPEEX;视频编码:H.264;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;支持X11屏幕采集 接口采集本机PulseAudio服务音频;[预览]支持推送端实时预览;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;屏幕和摄像头合成/多层合成;支持窗口采集(一般不建议使用 (GOP)、码率(bit-rate)设置;支持RTMP推送 live|record模式设置;支持前置摄像头镜像设置;支持软编码、特定机型硬编码;支持横屏、竖屏推送;支持Android屏幕采集推送;支持自建标准
如何获取Camera场景数据Unity3D获取摄像机数据通常用RenderTexture和RenderTexture.GetPixel方法来获取数据,把捕获屏幕的图像,存储在一个Texture2D实例中 需要注意的是,需要为输出纹理创建一个新的纹理对象,否则可能会在屏幕上看到一片空白。 is_pushing_rtmp_ && ! _ = false; }技术总结Unity3D下采集camera场景并推送RTMP具有重要的意义,可以为实时监控、在线直播、视频教程制作、增强现实和虚拟现实应用以及数据记录和分析等领域提供有力的支持 比如,采集camera场景可以用于增强现实和虚拟现实应用。在AR中,可以通过采集实际场景的画面,将虚拟元素与现实场景进行融合,增强沉浸感和互动性。
基于智慧教室或是会议的技术方案,一般主要是涉及到屏幕采集和推送,整体技术方案这块,一般建议走RTMP,说到这里,好人开发者提到,市面上也有RTSP的技术方案,甚至RTSP组播方案,这块,大牛直播SDK 教师和学生互动:学生端如需作为示范案例,屏幕数据共享给其他同学,只需请求同屏,数据反推到RTMP服务器,其他学生查看即可。 6. 如果采集屏幕,只要采集部分区域的话,可以点击“选取屏幕区域”按钮,选择需要采集的区域,采集推送过程中,可以移动采集区域; 2. 如果是高分屏(如有些采集设备,是4K屏,原始分辨率过高),用户又不想推这么高的分辨率的话,可以选中“缩放屏幕大小”,并指定缩放比例,可以先缩放,后编码推送数据; 3. Android平台RTMP屏幕推送端 对应工程:SmartServicePublisherV2 需要注意的事项: 1.
整体方案架构 Windows平台RTMP或RTSP推送,系采集端模块,主要完成,屏幕或者摄像头数据、麦克风或扬声器数据的采集,编码,然后按照特定格式打包,通过RTMP或者RTSP传输出去,实现直播目的。 格式的摄像头采集; [RTMP推流]超低延时的RTMP协议直播推流SDK(Windows 64位库支持RTMP扩展H.265推送); [音视频加密]RTMP支持AES128/AES192/AES256/ 屏幕叠加到摄像头:同4,效果展示,实际根据需求实现; 6. 采集桌面:可以通过点击“选择屏幕区域”获取采集区域,并可在采集过程中,随时切换区域位置,如不设定,默认全屏采集; 7. 使用DXGI采集屏幕,采集时停用Aero; 8. 采集窗口:可设定需要采集的窗口,窗口放大或缩小,推送端会自适应码率和分辨率; 9. 采集帧率(帧/秒):默认屏幕采集8帧,可根据实际场景需求设定到期望帧率; 10. 缩放屏幕大小缩放比:用于高清或超高清屏,通过设定一定的比例因子,缩放屏幕采集分辨率; 11.
背景随着国产操作系统的推进,传统行业对Linux平台的呼声和需求越来越大,之前几年,我们发布了Linux平台运营商级的RTSP转RTMP推送模块、RTMP推送模块和RTSP、RTMP播放模块,前段时间, 有开发者问我们,是不是可以在Linux平台实现轻量级RTSP服务,通过采集摄像头或者屏幕,在Linux平台实现类似于IPC的功能,便于第三方系统对接。 4000kbps push_api->SetVideoEncoderSpecialInt32Option(push_handle, "usage_type", 0); //0是摄像头编码, 1是屏幕编码 NT_PB_E_VIDEO_OPTION{ NT_PB_E_VIDEO_OPTION_NO_VIDEO = 0x0, NT_PB_E_VIDEO_OPTION_SCREEN = 0x1, // 采集屏幕 NT_PB_E_VIDEO_OPTION_CAMERA = 0x2, // 摄像头采集 NT_PB_E_VIDEO_OPTION_LAYER = 0x3, // 视频合并,